文章目录
  1. 1. 参考

对于Java枚举我之前所知道的是1

  1. 枚举本身就是一个类。
  2. 它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。
  3. 所有枚举值都是public static final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
  4. Enum默认实现了java.lang.Comparable接口。
  5. Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString(),默认返回字符串”Blue”.
  6. Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一般来说应该相对应地重写valueOf方法。
  7. Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值
  8. Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序。

《Effective Java》中写着单例模式推荐的方式是使用单元素的枚举类实现,在查资料过程中竟然发现枚举值里面还能重写枚举的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

/**
* 单元素的枚举类型的 单例
* @author yyl
*
*/

public enum Person {
//这里每一个枚举项都可以看做一个单例实例
instance,
him{
@Override
public String sayHello(String str) {
return "gays:"+str;
}
},
she{
@Override
public String sayHello(String str) {
return "girls:"+str;
}
};

public String sayHello(String str)
{

return "Hello:"+str;
}

}

使用单例的方式来调用sayHello

1
2
3
System.out.println(Person.instance.sayHello("tom"));
System.out.println(Person.him.sayHello("tom"));
System.out.println(Person.she.sayHello("tom"));

可以看到其输出为:

Hello:tom
gays:tom
girls:tom

参考

  1. http://www.cnblogs.com/rollenholt/archive/2012/11/27/2790402.html
  2. http://www.cnblogs.com/hemingwang0902/archive/2011/12/29/2306263.html

本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言

文章目录
  1. 1. 参考